#include <bits/stdc++.h>
using namespace std;
const int size = 500;
// int partition(vector<int>& a,int begin,int end){
//   while(begin<end){
//     while(begin<end&&a[begin]<=a[end]){
//       end--;
//     }
//     if (begin<end){
//       a[begin] = a[begin] + a[end] - (a[end] = a[begin]);
//       begin++;
//     }
//     while(begin<end&&a[begin]<=a[end]){
//       begin++;
//     }
//     if (begin<end){
//       a[begin] = a[begin] + a[end] - (a[end] = a[begin]);
//       end--;
//     }
//   }
//   return begin;
// }
// void quick_sort(vector<int>& a,int begin,int end){
//   if (begin<end){
//     int pos = partition(a,begin,end);
//     quick_sort(a,begin,pos-1);
//     quick_sort(a,pos+1,end);
//   }
// }


// int main() {
//       int n;vector<int> a;
//     cin>>n;
//     for(int i=0;i<n;i++){
//         int temp;
//         cin>>temp;a.push_back(temp);
//     }
//   quick_sort(a,0,a.size()-1);
//   for(int i=0;i<a.size();i++){
//     cout<<a[i]<<" ";
//   }
//   return 0;
// }


#include<bits/stdc++.h>
using namespace std;

void fast_sort(vector<int> &v,int left,int right){ 
  if (left>=right) return;
  int begin = left-1,end = right + 1,compare = v[begin+end>>1];///中间节点为 基准值 
  while(begin<end){
    do {begin++;}while(v[begin]<compare); //双指针，两边同时找到不符合条件按的 直接交换  更快
    do {end--;}while(v[end]>compare);
    if (begin<end) v[begin] = v[end] + v[begin] - (v[end] = v[begin]);
  }
  fast_sort(v,left,end);
  fast_sort(v,end+1,right);
}
int main(){
    int n;vector<int> v;
    cin>>n;
    for(int i=0;i<n;i++){
        int temp;
        cin>>temp;v.push_back(temp);
    }
    
    fast_sort(v,0,v.size()-1);
    
    for(int i=0;i<n;i++){
        cout<<v[i]<<" ";
    }
    return 0;
}












